{%- set class_name = enum | get_name_for_kind(flatten_nested_kind=True)
                                                          ~ "DataGenerator" -%}

class {{class_name}}
  : public ::ash::cros_healthd::connectivity::DataGeneratorInterface<{{
      enum | get_name_for_kind}}> {
 public:
  {{class_name}}(const {{class_name}}&) = delete;
  {{class_name}}& operator=(const {{class_name}}&) = delete;
  virtual ~{{class_name}}() = default;

  static std::unique_ptr<{{class_name}}> Create(
    ::ash::cros_healthd::connectivity::Context* context);

 public:
  // DataGeneratorInterface overrides.
  {{enum | get_name_for_kind}} Generate() override;
  bool HasNext() override;

 protected:
  {{class_name}}() = default;

 private:
  size_t enum_field_counter_ = 0;
};
